home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
t_os
/
h_logl11
/
h_log.asm
next >
Wrap
Assembly Source File
|
1991-10-18
|
3KB
|
193 lines
ASSUME CS:CODE,DS:CODE,SS:STACK
CODE SEGMENT DWORD 'CODE'
DOT_Y EQU 87H
LEN EQU 128H
PROG EQU 14000H-LEN
TBIOS:
EGB_init:
PUSH DWORD PTR 0
PUSHAD
CLD
MOV AX,2CH
MOV DS,AX
MOV ES,AX
MOV AL,0
XOR EDI,EDI
MOV ECX,-1
ENV: REPNZ SCASB
CMP [EDI],AL
JNZ SHORT ENV
ADD EDI,2
CNVRT: INC EDI
MOV AL,[EDI]
CMP AL,'a'
JC SHORT KOMOJI
CMP AL,'z'+1
JNC SHORT KOMOJI
SUB AL,20H
MOV [EDI],AL
KOMOJI: TEST AL,AL
JNZ SHORT CNVRT
CMP DWORD PTR [EDI-12],'H'+'_'*100H+'V'*10000H+'2'*1000000H
JNZ SHORT EXIT3
CMP DWORD PTR [EDI-08],'1'+'L'*100H+'1'*10000H+'1'*1000000H
JNZ SHORT EXIT3
CMP DWORD PTR [EDI-04],'.'+'E'*100H+'X'*10000H+'P'*1000000H
JNZ SHORT EXIT3
OR AL,[EDI-13]
JZ SHORT FILEOK
CMP AL,':'
JZ SHORT FILEOK
CMP AL,'\'
JNZ SHORT EXIT3
FILEOK: MOV AL,24H
MOV DS,AX
MOV ES,AX
MOV EDI,81H
MOVZX ECX,BYTE PTR [EDI-1]
MOV AL,' '
REPZ SCASB ; パラメータ1の前のスペーススキップ
JZ SHORT EXIT3
REPNZ SCASB ; パラメータ1スキップ
JNZ SHORT EXIT3
REPZ SCASB ; パラメータ2の前のスペーススキップ
JZ SHORT EXIT3
LEA EDX,[EDI-1]
REPNZ SCASB ; パラメータ2スキップ
XOR ECX,ECX
MOV BYTE PTR [EDI-1],CL ; パラメータ2の末尾を0にする
CMP BYTE PTR [EDX],'+'
JNZ SHORT OVRWRT
INC EDX
MOV AX,3D02H ; ファイルのオープン
INT 21H
JC SHORT OVRWRT
MOV EBX,EAX
XOR EDX,EDX
MOV AX,4202H ; ファイルのシーク
INT 21H
MOV EAX,EBX
JMP SHORT EXIT4
OVRWRT: MOV AH,3CH ; オーバーライトモード
INT 21H
JNC SHORT EXIT4
EXIT3: XOR EAX,EAX
EXIT4: MOV CX,118H
MOV DS,CX
MOV [HANDLE+PROG],AX
POPAD
RET
ALIGN 4
EGB_sjisString:
PUSH DWORD PTR 0
CMP WORD PTR [ESI+2],DOT_Y
JNZ SHORT EXIT2
PUSH ESI
ADD ESI,4
COMMON: MOV BX,FS:[HANDLE+PROG]
TEST BX,BX
JZ SHORT EXIT1
LODSW
MOVZX ECX,AX
TEST ECX,ECX
JZ SHORT EXIT1
PUSH DS
MOV EDX,ESI
MOV AH,40H
INT 21H
JC SHORT EXIT5
CMP EAX,ECX
JNZ SHORT EXIT5
MOV AX,118H
MOV DS,AX
MOV CL,2
MOV EDX,OFFSET CRLF+PROG
MOV AH,40H
INT 21H
JC SHORT EXIT5
CMP EAX,ECX
JZ SHORT EXIT6
EXIT5: MOV [HANDLE+PROG],0
EXIT6: POP DS
EXIT1: POP ESI
EXIT2: RET
ALIGN 4
EGB_connectSjisString:
PUSH DWORD PTR 0
CMP WORD PTR GS:[EBP+344H+2],DOT_Y
JNZ SHORT EXIT2
PUSH ESI
JMP SHORT COMMON
CRLF DB 13,10
HANDLE DW ?
ALIGN 4
START:
; TBIOS書き込みセグメント
MOV AX,118H
MOV ES,AX
CLD
; TBIOS最後の必要エリアが0か調べる
MOV EDI,PROG
XOR EAX,EAX
MOV ECX,LEN/4
REPZ SCASD
JNZ SHORT ERROR
; コール先を探す
MOV EBX,ES:[20H]
MOV EAX,0BD14FF2EH ; CALL CS:[EDI*4+????????]
MOV ECX,100H
DEC EBX
SEARCH: INC EBX
CMP ES:[EBX],EAX
LOOPNZ SEARCH
JNZ SHORT ERROR
MOV EBX,ES:[EBX+4]
; データの書換え EGB_init
MOV EAX,OFFSET EGB_init+PROG
XCHG EAX,ES:[EBX]
MOV DWORD PTR [EGB_init+1],EAX
; データの書換え EGB_sjisString
MOV EAX,OFFSET EGB_sjisString+PROG
XCHG EAX,ES:[EBX+60H*4]
MOV DWORD PTR [EGB_sjisString+1],EAX
; データの書換え EGB_connectSjisString
MOV EAX,OFFSET EGB_connectSjisString+PROG
XCHG EAX,ES:[EBX+61H*4]
MOV DWORD PTR [EGB_connectSjisString+1],EAX
; TBIOSへの転送
XOR ESI,ESI
MOV EDI,PROG
MOV ECX,LEN/4
REP MOVSD
; 正常終了
MOV AL,0
JMP SHORT EXIT
; 異常終了
ERROR: MOV AL,1
EXIT: MOV AH,4CH
INT 21H
DB '<<< H_LOG V1.2 by Yasu.Hara. >>>'
CODE ENDS
STACK SEGMENT DWORD STACK 'STACK'
DB 1024 DUP(?)
STACK ENDS
END START